package org.wheel.module.core.request;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;

import java.io.Serial;
import java.io.Serializable;

/**
 * 在操作数据库时,字段值设置类
 * 形如: column_name = ?,根据sno的顺序,逐个替代SQL的?
 * 
 */
@Builder
@AllArgsConstructor
@Data
public class ParamField implements Comparable, Serializable {
    @Serial
    private static final long serialVersionUID = 1L;
    /**
     * 数据库字段名
     */
    private String field;
    /**
     * 连接符
     */
    private String connector;
    /**
     * 字段值，在搜索原SQL功能中，用于纪录占位符的值
     */
    private Object value;
    /**
     * 是否跳过该字段，在外部传参中，用于控制字段是否参与搜索
     * 默认为false
     */
    private boolean skip;
    /**
     * 函数,用于前段传入的函数处理
     */
    private String func;
    /**
     * 字段顺序，前端传入，用于排序参数
     * 内部处理SQL的时候，用于纪录参数的顺序，内部处理，从1开始计数
     */
    private int sno;// 根据sno顺序,进行SQL的参数的替代

    public ParamField() {
    }

    public ParamField(String field, Object value) {
        this.field = field;
        this.value = value;
        this.sno = 1;
    }

    public ParamField(String field, Object value, int sno) {
        this.field = field;
        this.value = value;
        this.sno = sno;
    }

    @Override
    public int compareTo(Object o) {
        if (o instanceof ParamField) {
            if (this.sno == ((ParamField) o).getSno()) {
                return this.field.compareTo(((ParamField) o).getField());
            }
            return this.sno - ((ParamField) o).getSno();
        }
        return -1;
    }
}
